#include<bits/stdc++.h>
using namespace std;
struct SEG{
	struct st{
		int l,r,pl,pr,c;
	}a[4000006];
	void bt(int x,int l,int r){
		a[x].l=l;
		a[x].r=r;
		a[x].pl=-1e8,a[x].pr=1e8;
		a[x].c=1e8;
		if(l<r){
			bt(x<<1,l,(l+r>>1));
			bt(x<<1|1,(l+r>>1)+1,r);
		}
	}
	void pu(int x){
		a[x].pl=max(a[x<<1].pl,a[x<<1|1].pl);
		a[x].pr=min(a[x<<1].pr,a[x<<1|1].pr);
		a[x].c=min({a[x<<1].c,a[x<<1|1].c,a[x<<1|1].pr-a[x<<1].pl});
	}
	void cg(int x,int p,int tl,int tr){
		if(a[x].l==a[x].r) return a[x].pl=tl,a[x].pr=tr,a[x].c=tr-tl,void();
		int mid=a[x].l+a[x].r>>1;
		cg(x<<1|(p>mid),p,tl,tr);
		pu(x);
	}
}T;
int n=1e6,q;
multiset<int>L[1000006],R[1000006];
char c;
void upd(int x){
	int pl=-1e8,pr=1e8;
	if(L[x].size()) pl=*--L[x].end();
	if(R[x].size()) pr=*R[x].begin();
	T.cg(1,x,pl,pr);
}
int main(){
	freopen("stone.in","r",stdin);
	freopen("stone.out","w",stdout);
	cin>>q;
	T.bt(1,1,n);
	for(int i=1,l,r;i<=q;i++){
		scanf("\n%c %d %d",&c,&l,&r);
		if(c=='A'){
			L[r].insert(l),R[l].insert(r);
			upd(l),upd(r); 
		}
		if(c=='R'){
			L[r].erase(L[r].find(l)),R[l].erase(R[l].find(r));
			upd(l),upd(r);
		}
		int ans;
		if(T.a[1].pl<T.a[1].pr) ans=*R[T.a[1].pl].begin()-*--L[T.a[1].pr].end();
		else ans=T.a[1].c;
		printf("%d\n",ans);
	}
}
